package com.micro.ai.auth.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.micro.ai.auth.entity.AuditLog;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 操作审计日志服务接口
 * 
 * @author micro-ai
 * @since 0.0.1
 */
public interface AuditLogService extends IService<AuditLog> {

    /**
     * 记录审计日志
     * 
     * @param auditLog 审计日志对象
     */
    void recordAuditLog(AuditLog auditLog);

    /**
     * 分页查询审计日志
     * 
     * @param page 分页参数
     * @param userId 用户ID
     * @param tenantId 租户ID
     * @param action 操作动作
     * @param resourceType 资源类型
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 分页结果
     */
    IPage<AuditLog> getAuditLogPage(
            Page<AuditLog> page,
            String userId,
            String tenantId,
            String action,
            String resourceType,
            LocalDateTime startTime,
            LocalDateTime endTime
    );

    /**
     * 查询用户的最近操作日志
     * 
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 审计日志列表
     */
    List<AuditLog> getRecentLogsByUserId(String userId, Integer limit);

    /**
     * 查询资源的所有操作历史
     * 
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     * @return 审计日志列表
     */
    List<AuditLog> getLogsByResource(String resourceType, String resourceId);

    /**
     * 获取操作统计
     * 
     * @param userId 用户ID
     * @param tenantId 租户ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 操作统计列表
     */
    List<AuditLog> getOperationStats(String userId, String tenantId, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 清理过期审计日志
     * 
     * @param days 保留天数
     * @return 清理数量
     */
    int cleanExpiredLogs(int days);
}
